﻿using DevExpress.XtraEditors;
using System;
using System.Data;
using System.Text;
using System.Windows.Forms;

namespace SiparisKontrol
{
    public partial class frmMain : XtraForm
    {
        public frmMain()
        {
            InitializeComponent();
        }

        private void frmMain_Load(object sender, EventArgs e)
        {
            dteSon.DateTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59);
            dteİlk.DateTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
            rdListeTipi.SelectedIndex = 1;
        }

        private void simpleButton1_Click(object sender, EventArgs e)
        {
            if (gridView1.FocusedRowHandle > -1)
            {
                frmDetay frm = new frmDetay();
                foreach (var item in gridView1.GetSelectedRows())
                {
                    string[] dizi = new string[2];
                    dizi[0] = gridView1.GetRowCellDisplayText(item, gridView1.Columns["Evrak Seri"]);
                    dizi[1] = gridView1.GetRowCellDisplayText(item, gridView1.Columns["Evrak Sıra"]);
                    frm.Evraklar.Add(dizi);
                    frm.CariKodu = gridView1.GetRowCellDisplayText(item, gridView1.Columns["Cari Kodu"]);

                    frm.Odeme = Cevir.Parse<int>(gridView1.GetRowCellDisplayText(item, gridView1.Columns["Ödeme"]));
                    frm.SrmMerkezi = gridView1.GetRowCellDisplayText(item, gridView1.Columns["S.Merkezi"]);
                }
                frm.ShowDialog(this);
            }
        }

        private void txtCariKod_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            CariAra(AramaSekli.Kodu, txtCariKod.Text);
        }

        private void CariAra(AramaSekli tip, string filtre)
        {
            frmListe liste = new frmListe();
            liste.AramaTipi = tip;
            liste.Filtre = filtre;
            if (liste.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                txtCariKod.Text = liste.Result[0];
                txtCariAdi.Text = liste.Result[1];
            }
        }

        private void txtCariAdi_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            CariAra(AramaSekli.Adi, txtCariAdi.Text);
        }

        private void txtCariKod_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F10)
            {
                CariAra(AramaSekli.Kodu, txtCariKod.Text);
            }
            else if (e.KeyCode == Keys.Enter)
            {
                gridControl1.DataSource = SiparisListesi(txtCariKod.Text, dteİlk.DateTime, dteSon.DateTime, (byte)rdListeTipi.SelectedIndex);
                gridControl1.Focus();
            }
        }

        DataTable SiparisListesi(string cariKodu, DateTime ilktarih, DateTime sonTarih, byte durum)
        {
            DataTable dt = new DataTable();
            StringBuilder sb = new StringBuilder();
            sb.Append("select * from (select *,(case when Miktar > [Tamamlanan Miktar] then 'Açık' else 'Kapalı' end) as Durum from (SELECT     SIPARISLER.sip_belge_tarih AS [Sipariş Tarihi], SIPARISLER.sip_evrakno_seri AS [Evrak Seri], SIPARISLER.sip_evrakno_sira AS [Evrak Sıra], CARI_HESAPLAR.cari_kod AS [Cari Kodu], ");
            sb.Append("                      CARI_HESAPLAR.cari_unvan1 AS [Cari İsmi], SUM(SIPARISLER.sip_miktar) AS Miktar, SUM(SIPARISLER.sip_teslim_miktar) AS [Tamamlanan Miktar], SUM(SIPARISLER.sip_tutar) AS Tutar, ");
            sb.Append("                      SUM(SIPARISLER.sip_miktar) - SUM(SIPARISLER.sip_teslim_miktar) AS [Kalan Miktar], SIPARISLER.sip_teslim_tarih AS [Teslim Tarihi], COUNT(SIPARISLER.sip_RECno) AS [Satır Sayısı],SIPARISLER.sip_opno as Ödeme,sip_cari_sormerk as [S.Merkezi] ");
            sb.Append(" FROM         SIPARISLER INNER JOIN ");
            sb.Append("                      CARI_HESAPLAR ON SIPARISLER.sip_musteri_kod = CARI_HESAPLAR.cari_kod ");
            sb.Append(" WHERE     (SIPARISLER.sip_tip = 0) AND (SIPARISLER.sip_cins = 0) and (SIPARISLER.sip_OnaylayanKulNo > 0) AND (CARI_HESAPLAR.cari_kod like @cari + '%') AND (SIPARISLER.sip_belge_tarih >= @baslangic AND ");
            sb.Append("                      SIPARISLER.sip_belge_tarih <= @bitis) ");
            sb.Append(" GROUP BY SIPARISLER.sip_opno,sip_cari_sormerk,SIPARISLER.sip_belge_tarih, SIPARISLER.sip_evrakno_seri, SIPARISLER.sip_evrakno_sira, CARI_HESAPLAR.cari_kod, CARI_HESAPLAR.cari_unvan1, SIPARISLER.sip_teslim_tarih) as tbl) as tbl where Durum like @durum ");

            using (Query q = new Query())
            {
                q.Add(sb.ToString());
                q.Add("@cari", SqlDbType.NVarChar, cariKodu);
                q.Add("@baslangic", SqlDbType.DateTime, ilktarih);
                q.Add("@bitis", SqlDbType.DateTime, sonTarih);

                switch (durum)
                {
                    case 0:
                        q.Add("@durum", SqlDbType.NVarChar, "%");
                        break;
                    case 1:
                        q.Add("@durum", SqlDbType.NVarChar, "Açık");
                        break;
                    case 2:
                        q.Add("@durum", SqlDbType.NVarChar, "Kapalı");
                        break;
                }

                dt = q.Fill();
            }
            return dt;
        }

        private void txtCariAdi_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F10)
            {
                CariAra(AramaSekli.Adi, txtCariAdi.Text);
            }
            else if (e.KeyCode == Keys.Enter)
            {
                gridControl1.DataSource = SiparisListesi(txtCariKod.Text, dteİlk.DateTime, dteSon.DateTime, (byte)rdListeTipi.SelectedIndex);
                gridControl1.Focus();
            }
        }

        private void simpleButton1_Click_1(object sender, EventArgs e)
        {
            gridControl1.DataSource = SiparisListesi(txtCariKod.Text, dteİlk.DateTime, dteSon.DateTime, (byte)rdListeTipi.SelectedIndex);
            gridControl1.Focus();
        }
    }
}
